/*//////////////////////////////////////////////////////////////////////////////////////////
		Reloj Propeller 
//////////////////////////////////////////////////////////////////////////////////////////*/
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include <stdarg.h>
#include <avr/interrupt.h>
#include <stdlib.h>
/*-----------------------*/
#define SAL_CONFD		DDRD		//Configuracion puerto d OC1B(4), OC1A(5), OC2(7)			//Atmega16
//#define SAL_CONFD		DDRB		//Configuracion puerto d OC1B(4), OC1A(5), OC2(7)			//Atmega8
#define SAL_CONFB		DDRB		//Configuracion puerto b OC0(3)								//Atmega16
#define SAL_OC1B		4			//atmega16								
#define SAL_OC1A		5			//atmega16
#define SAL_OC0			3			//atmega16
#define SAL_OC2			7			//atmega16
/*-----------------------*/
unsigned long OVERF_TIMER0;			//variable para contar los overflows timer0
unsigned long OVERF_TIMER1;			//variable para contar los overflows timer1
unsigned long CUENTA_TIMER1;		//variable para conteo timer 1
/*--------------------------------------------*/
void T0_disable(void)
{
	TCCR0=0;								//reiniciar timer0	
}
/*--------------------------------------------*/
void T0_conf_TIMER(void)
{
 	TIMSK|=(1<<TOIE0);						//Enable Overflow Interrupt
	TCCR0|=(1<<CS00);						//clkI/O/(No prescaling)
}
/*--------------------------------------------*/
void T1_conf_COUNTER(void)
{
	TIMSK|=(1<<TOIE1);						//Enable Overflow Interrupt
	TCCR1B|=(1<<CS12)|(1<<CS11);			//timer 1 como Falling
}
/*--------------------------------------------*/
void T1_disable(void)
{
	TCCR1B=0;								//reiniciar timer0	
}
/*--------------------------------------------
			LCD-4BITS+PRINTF
---------------------------------------------*/
#define PB_Config	DDRB	// Configuracion de puerto
#define PB			PORTB	// Puerto de salida
#define RS 			0
#define RW 			1
#define E			2
/*--------------------------------------------*/
void LCD_MASK_CTR(char DATAOUT_C)
{	
	PB=DATAOUT_C;
	PB&=~(1<<RS);
	PB&=~(1<<RW);
	PB|=(1<<E);
	_delay_ms(1);
	PB&=~(1<<E);
}
 /*--------------------------------------------*/
void MASK_CTR(char DATO_C)
{
	char DATO_C1;
	DATO_C1 = DATO_C & 0xF0;  
	LCD_MASK_CTR(DATO_C1); 
 	DATO_C1 = ((DATO_C<<4) & 0xF0); 
	LCD_MASK_CTR(DATO_C1); 
}
/*--------------------------------------------*/
void LCD_MASK(char DATAOUT)
{
	PB=DATAOUT;
	PB|=(1<<RS);
	PB&=~(1<<RW);
	PB|=(1<<E);
	_delay_ms(1);
	PB&=~(1<<E);
}
/*--------------------------------------------*/
void MASK(char DATO)
{
	char DATO1;
	DATO1=DATO & 0xF0;
	LCD_MASK(DATO1); 
 	DATO1=((DATO<<4)&0xF0);
	LCD_MASK(DATO1); 
}
/*--------------------------------------------*/
void CLEAR_DISPLAY (void)
{
	MASK_CTR(0x01); 
}
/*--------------------------------------------*/
void SET_DDRAM1 (void)
{
	MASK_CTR(0x80); 
}
/*--------------------------------------------*/
void SET_DDRAM2 (void)
{
	MASK_CTR(0xC0);
}
/*--------------------------------------------*/
void LCD_INIT(void)  // inicializar LCD 
{
	PB_Config=0XFF;
	MASK_CTR(0x02);  // Inicializar LCD  4 bits 
	MASK_CTR(0x28);  // Inicializar LCD  2 lineas
	MASK_CTR(0x0C);
}
/*--------------------------------------------*/
static int Enviar_Mensaje(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(Enviar_Mensaje,NULL,_FDEV_SETUP_WRITE);
/*--------------------------------------------*/
static int Enviar_Mensaje(char c, FILE *stream)
{ 		
	while(c!='\n')           
	{	
        MASK(c);
		return 0;                       
  	}
	return 0;
}
/*--------------------------------------------*/
void punto_flot (char *fmt, ...)
{
	va_list args;
	va_start(args, fmt);
	vfprintf(stdout, fmt, args);
	va_end(args);
}
/*--------------------------------------------*/
void enable_printf (void)
{
	stdout=&mystdout;
}
/*----------------------------------------------
		Generales
----------------------------------------------*/

/*//////////////////////////////////////////////////////////////////////////////////////////
		Programa PRINCIPAL 
//////////////////////////////////////////////////////////////////////////////////////////*/
int main(void)
{				
	sei();
	LCD_INIT();	

	while(1)
	{	
						
	}
}
/*////////////////////////////////////////////////////////////////////////////////////////*/
ISR(TIMER0_OVF_vect)
{
	OVERF_TIMER0++;	
	//if(OVERF_TIMER0==31250)	//para 1 seg
	if(OVERF_TIMER0==31372)	//para 1 seg
	{		
//		deshabilitar_timers_counters();
		CUENTA_TIMER1=OVERF_TIMER1+TCNT1;		//save count
		TCNT1=0;								//clear registro timer 1
		TCNT0=0;								//clear registro timer 0
		OVERF_TIMER0=0;							//clear variable
		OVERF_TIMER1=0;							//clear variable
//		inicializar_timers_counters();
	}
}
/*-----------------------*/
ISR(USART_RXC_vect)
{
//	data=UDR;	
}
/*//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////*/
